<?php
namespace _PersoonBeheer\Model;
class Index {
    private $_json = ['resultaat' => true, 'personen' => [], 'aantalPaginas' => 0, 'pagina' => 0, 'knopAantal' => 0];
    public function index() {
        $this->_json['knopAantal'] = \Instelling::GET('filter.backend.knopaantal');
        $pagina = filter_input(INPUT_POST, 'pagina', FILTER_SANITIZE_NUMBER_INT);
        $pagina = isset($pagina) ? $pagina : 0;      
        $sorteren = filter_input(INPUT_POST, 'sorteren', FILTER_SANITIZE_STRIPPED);
        $sortLijst = explode(',',$sorteren);
        if (count($sortLijst) == 0) {
            $sortLijst = ['naam:ASC'];
        }
        $sorteren = [];
        foreach($sortLijst as $sortItem) {
            $sortItems = explode(':',$sortItem);
            $sort = '';
            if (!empty($sortItems[1])) {
                $sortItems[1] = strtoupper($sortItems[1]) == 'DESC'?' DESC':' ASC';
                $sortItems[0] = strtolower($sortItems[0]);
                if ($items['0'] == 'naam') {
                    $sort = "naam {$sortItems[1]},voornaam {$sortItems[1]},initialen {$sortItems[1]}";
                } else {
                    $sort = $sortItems[0]." ".$sortItems[1];
                }
                array_push($sorteren,$sort);
            }                
        }
        $sorteren = implode(',',$sorteren);
        /*if(trim($sorteren)==""){
            $sorteren = "naam,voornaam,initialen";
        }*/
        $dbParams = [];
        $zoeken = [];
        $zoeken['op'] = filter_input(INPUT_POST, 'zoekop', FILTER_SANITIZE_NUMBER_INT);
        if ($zoeken['op'] > 0) {
            $pagina = 0;
        }
        $zoeken['term'] = trim(filter_input(INPUT_POST, 'zoekterm', FILTER_SANITIZE_STRIPPED));
        $zoeken['optie'] = filter_input(INPUT_POST, 'zoekoptie', FILTER_SANITIZE_NUMBER_INT);
        $zoek = $zoeken['op'] > 0 && !empty($zoeken['term']);
        $zoekSql = '';
        if ($zoek) {
            $zoekSql = $zoeken['op'] == 1 ? " CONCAT_WS(' ',naam,voornaam,initialen) " : " email ";
            $zoekSql .= "LIKE :zoekterm";
            $tmpZoek = [];
            if (intval($zoeken['optie']) > 0) {
                array_push($tmpZoek,'%');
            }
            array_push($tmpZoek,$zoeken['term']);
            if (intval($zoeken['optie']) < 2) {
                array_push($tmpZoek,'%');
            }
            $tmpZoek = implode('',$tmpZoek);
            $dbParams[':zoekterm'] = $tmpZoek;
        }
        $weergaveActie = filter_input(INPUT_POST,'weergaveactie',FILTER_SANITIZE_NUMBER_INT);
        $geselecteerd = filter_input(INPUT_POST,'geselecteerd',FILTER_SANITIZE_STRING);       
        if (intval($weergaveActie) > 0) {
            $zoek = true;
            if (!empty($zoekSql)) {
                $zoekSql .= ' ';
            }
            switch ($weergaveActie) {
                case 1: $zoekSql .= 'id IN ('.$geselecteerd.')';
                        break;
                case 2: $zoekSql .= 'id NOT IN ('.$geselecteerd.')';
            }
        }
        $filter = filter_input(INPUT_POST, 'filter');
        if (!isset($filter) || !is_array($filter)) {
            $filter = [];
        }
        try {
            $this->_json['pagina'] = $pagina;
            // bepaal aantal paginas
            $dbSql = "SELECT 1 FROM persoon"; //TODO uitbreiden met filter
            if ($zoek) {
                $dbSql .= " WHERE " . $zoekSql;
            }
            $dbStmt = \Db::GET()->prepare($dbSql);
            $dbStmt->execute($dbParams);
            $aantal = $dbStmt->rowCount();
            $lijstLengte = intval(\Instelling::GET('filter.backend.lijstlengte'));
            $this->_json['aantalPaginas'] = ceil($aantal / $lijstLengte);
            // haal inhoud pagina op
            $van = $this->_json['pagina'] * $lijstLengte;
            $params = [];
            $dbSql = "SELECT id, IF(aanhef='M','Dhr. ','Mevr. ') AS aanhef, CONCAT_WS(' ',naam,voornaam,initialen) AS naam, geborenop, datumnieuw, datumbezoek, email, status, speciaal
                       FROM persoon ";
            if ($zoek) {
                $dbSql .= "WHERE " . $zoekSql;
            }
            $dbSql .= " ORDER BY {$sorteren}
                        LIMIT {$van},{$lijstLengte}"; // TODO nog uit te breiden met filter           
            //$this->_json['sql']= $dbSql;
            $dbStmt = \Db::GET()->prepare($dbSql);
            $dbStmt->execute($dbParams);
            if ($dbStmt->rowCount() > 0) {
                $personen = [];
                while ($dbRij = $dbStmt->fetch(\PDO::FETCH_ASSOC)) {
                    
                    $tmp = \DateTime::createFromFormat('Y-m-d', $dbRij['geborenop']);
                    $geborenOp = $tmp->format('d-m-Y');
                    $tmp = \DateTime::createFromFormat('Y-m-d', $dbRij['datumnieuw']);
                    $datumNieuw = $tmp->format('d-m-Y');
                    $tmp = \DateTime::createFromFormat('Y-m-d', $dbRij['datumbezoek']);
                    $datumBezoek = $tmp->format('d-m-Y');
                    $persoon = [
                        'id' => $dbRij['id'],
                        'aanhef' => $dbRij['aanhef'],
                        'naam' => $dbRij['naam'],
                        'geborenop' => $geborenOp,
                        'datumnieuw' => $datumNieuw,
                        'datumbezoek' => $datumBezoek,
                        'email' => $dbRij['email'],
                        'status' => $dbRij['status'],
                        'speciaal' => $dbRij['speciaal']
                    ];
                    array_push($personen, $persoon);
                }
                $this->_json['personen'] = $personen;
            }
            return $this->_json;
        } catch (PDOException $ex) {
            
        }
    }
    public function getLijst() {
        $lijst = filter_input(INPUT_POST, 'lijst', FILTER_SANITIZE_STRIPPED);
        if (!isset($lijst) || empty($lijst)) {
            $_POST['pagina'] = 0;
            return $this->_getPagina();
        }
        $tLijst = explode(',', $lijst);
        if (count($tLijst) == 0) {
            $_POST['pagina'] = 0;
            return $this->_getPagina();
        }
        $welNiet = filter_input(INPUT_POST, 'welniet', FILTER_SANITIZE_NUMBER_INT);
        $dbSql = "SELECT id, IF(aanhef='M','Dhr. ','Mevr. ') AS aanhef, CONCAT_WS(' ',naam,voornaam,initialen) AS naam, geborenop, datumnieuw, datumbezoek, email, status, speciaal
                  FROM persoon
                  WHERE id";
        if (isset($welNiet) && intval($welNiet) == 1) {
            $dbSql .= "";
        }else{
            $dbSql .= " NOT ";
        }
        $dbSql = "IN (:lijst) ORDER BY naam, voornaam";
        try {
            $dbStmt = \Db::GET()->prepare($dbSql);
            $dbStmt->execute([':lijst' => $lijst]);
            $personen = [];
            while ($dbRij = $dbStmt->fetch(\PDO::FETCH_ASSOC)) {
                $tmp = \DateTime::createFromFormat('Y-m-d', $dbRij['geborenop']);
                $geborenOp = $tmp->format('d-m-Y');
                $tmp = \DateTime::createFromFormat('Y-m-d', $dbRij['datumnieuw']);
                $datumNieuw = $tmp->format('d-m-Y');
                $tmp = \DateTime::createFromFormat('Y-m-d', $dbRij['datumbezoek']);
                $datumBezoek = $tmp->format('d-m-Y');
                $persoon = [
                    'id' => $dbRij['id'],
                    'aanhef' => $dbRij['aanhef'],
                    'naam' => $dbRij['naam'],
                    'geborenop' => $geborenOp,
                    'datumnieuw' => $datumNieuw,
                    'datumbezoek' => $datumBezoek,
                    'email' => $dbRij['email'],
                    'status' => $dbRij['status'],
                    'speciaal' => $dbRij['speciaal']
                ];
                array_push($personen, $persoon);
            }
            $this->_json['personen'] = $personen;
            return $this->_json;
        } catch (PDOException $ex) {
        }
    }
}
